/**
 * 
 */
package ru.etu.game;

import java.awt.Graphics;
import java.util.ArrayList;

/**
 * @author Alucard
 * @author Neko
 * Класс CompoundSprite представляет собой контейнер спрайтов, 
 * являющихся частью одного объекта.
 */
public class CompoundSprite implements Sprite {
	@Override
	public int compareTo(Sprite s) {
		if (this.point.getZ() < s.getPoint().getZ() ) return -1;
		if (this.point.getZ() > s.getPoint().getZ() ) return 1; 
		return 0;
	}
	@Override
	public void draw(Graphics g) {
		Point p = null;
		for (Sprite s : sprites){
			p = s.getPoint();
			g.drawImage(((StaticSprite) s).getImage(), 
					point.getX() + p.getX(), point.getY() + p.getY(), null);			
		}
	}	
	@Override
	public  void collision(Sprite sprite){
		
	}
	/**
	 * @param sprite - добавить спрайт в объект
	 */
	public void Add(Sprite sprite) {
		sprite.setPoint(sprite.getPoint().minus(this.point)); // переход в локальную систему координат
		sprites.add(sprite);
		//sort(sprites);   
	}
	/**
	 * @param index - удалить спрайт из объекта
	 */
	public void Remove(int index) {
		sprites.remove(index); 
	}
	/* (non-Javadoc)
	 * @see ru.etu.game.Sprite#getPoint()
	 */
	@Override
	public Point getPoint() {
		return point;
	}
	/* (non-Javadoc)
	 * @see ru.etu.game.Sprite#setPoint(ru.etu.game.Point)
	 */
	@Override
	public void setPoint(Point point) {
		this.point = point;
	}
	/**
	 * @return количество спрайтов в объекте
	 */
	public int size() {
		return sprites.size();
	}
	/**
	 * @param index - номер спрайта в контейнере
	 * @return спрайт
	 */
	public Sprite getSprite(int index) {
		return sprites.get(index);
		//return null;
	}
	/**
	 * @param index - номер спрайта в контейнере
	 * @param sprite - новый спрайт
	 */
	public void setSprite(int index, Sprite sprite) {
		sprites.set(index,sprite);
	}

	/**
	 * положение на экране всего составного объекта
	 */
	private Point point;
	/**
	 * массив спрайтов - частей составного спрайта
	 */
	private ArrayList<Sprite> sprites;
	
	{
		point = new Point(0,0,0);
		sprites = new ArrayList<Sprite>();		
	}
	
}
